public class LeetCode518 {
    public int change(int amount, int[] coins) {
        // 创建一个数组来存储每个金额的方法数，默认值为0
        int[] dp = new int[amount + 1];

        // 凑成0元的方法只有1种，就是什么也不做
        dp[0] = 1;

        // 对于每一种硬币
        for (int coin : coins) {
            // 更新从coin开始直到amount的所有金额的方法数
            for (int i = coin; i <= amount; i++) {
                dp[i] += dp[i - coin];
            }
        }

        // 返回凑成amount的方法数
        return dp[amount];
    }
}
